package Case_Optimization_Pkg1 is

   type Element is null record;

   type Internal_Element_Kinds is
     (Not_An_Element,
      An_All_Calls_Remote_Pragma,       
      An_Asynchronous_Pragma,           
      An_Atomic_Pragma,                 
      An_Atomic_Components_Pragma,      
      An_Attach_Handler_Pragma,         
      A_Controlled_Pragma,              
      A_Convention_Pragma,              
      A_Discard_Names_Pragma,           
      An_Elaborate_Pragma,              
      An_Elaborate_All_Pragma,          
      An_Elaborate_Body_Pragma,         
      An_Export_Pragma,                 
      An_Import_Pragma,                 
      An_Inline_Pragma,                 
      An_Inspection_Point_Pragma,       
      An_Interrupt_Handler_Pragma,      
      An_Interrupt_Priority_Pragma,     
      A_Linker_Options_Pragma,          
      A_List_Pragma,                    
      A_Locking_Policy_Pragma,          
      A_Normalize_Scalars_Pragma,       
      An_Optimize_Pragma,               
      A_Pack_Pragma,                    
      A_Page_Pragma,                    
      A_Preelaborate_Pragma,            
      A_Priority_Pragma,                
      A_Pure_Pragma,                    
      A_Queuing_Policy_Pragma,          
      A_Remote_Call_Interface_Pragma,   
      A_Remote_Types_Pragma,            
      A_Restrictions_Pragma,            
      A_Reviewable_Pragma,              
      A_Shared_Passive_Pragma,          
      A_Storage_Size_Pragma,            
      A_Suppress_Pragma,                
      A_Task_Dispatching_Policy_Pragma, 
      A_Volatile_Pragma,                
      A_Volatile_Components_Pragma,     
      An_Assert_Pragma,
      An_Assertion_Policy_Pragma,
      A_Detect_Blocking_Pragma,
      A_No_Return_Pragma,
      A_Partition_Elaboration_Policy_Pragma,
      A_Preelaborable_Initialization_Pragma,
      A_Priority_Specific_Dispatching_Pragma,
      A_Profile_Pragma,
      A_Relative_Deadline_Pragma,
      An_Unchecked_Union_Pragma,
      An_Unsuppress_Pragma,
      An_Implementation_Defined_Pragma, 
      An_Unknown_Pragma,
      A_Defining_Identifier,                     
      A_Defining_Character_Literal,              
      A_Defining_Enumeration_Literal,            
      A_Defining_And_Operator,                    
      A_Defining_Or_Operator,                     
      A_Defining_Xor_Operator,                    
      A_Defining_Equal_Operator,                  
      A_Defining_Not_Equal_Operator,              
      A_Defining_Less_Than_Operator,              
      A_Defining_Less_Than_Or_Equal_Operator,     
      A_Defining_Greater_Than_Operator,           
      A_Defining_Greater_Than_Or_Equal_Operator,  
      A_Defining_Plus_Operator,                   
      A_Defining_Minus_Operator,                  
      A_Defining_Concatenate_Operator,            
      A_Defining_Unary_Plus_Operator,             
      A_Defining_Unary_Minus_Operator,            
      A_Defining_Multiply_Operator,               
      A_Defining_Divide_Operator,                 
      A_Defining_Mod_Operator,                    
      A_Defining_Rem_Operator,                    
      A_Defining_Exponentiate_Operator,           
      A_Defining_Abs_Operator,                    
      A_Defining_Not_Operator,                    
      A_Defining_Expanded_Name,  
      An_Ordinary_Type_Declaration,              
      A_Task_Type_Declaration,                   
      A_Protected_Type_Declaration,              
      An_Incomplete_Type_Declaration,            
      A_Tagged_Incomplete_Type_Declaration,      
      A_Private_Type_Declaration,                
      A_Private_Extension_Declaration,           
      A_Subtype_Declaration,                     
      A_Variable_Declaration,                    
      A_Constant_Declaration,                    
      A_Deferred_Constant_Declaration,           
      A_Single_Task_Declaration,                 
      A_Single_Protected_Declaration,            
      An_Integer_Number_Declaration,             
      A_Real_Number_Declaration,                 
      An_Enumeration_Literal_Specification,      
      A_Discriminant_Specification,              
      A_Component_Declaration,                   
      A_Loop_Parameter_Specification,            
      A_Procedure_Declaration,                   
      A_Function_Declaration,                    
      A_Parameter_Specification,                 
      A_Procedure_Body_Declaration,              
      A_Function_Body_Declaration,               
      A_Return_Object_Declaration,            
      A_Null_Procedure_Declaration,           
      A_Package_Declaration,                     
      A_Package_Body_Declaration,                
      An_Object_Renaming_Declaration,            
      An_Exception_Renaming_Declaration,         
      A_Package_Renaming_Declaration,            
      A_Procedure_Renaming_Declaration,          
      A_Function_Renaming_Declaration,           
      A_Generic_Package_Renaming_Declaration,    
      A_Generic_Procedure_Renaming_Declaration,  
      A_Generic_Function_Renaming_Declaration,   
      A_Task_Body_Declaration,                   
      A_Protected_Body_Declaration,              
      An_Entry_Declaration,                      
      An_Entry_Body_Declaration,                 
      An_Entry_Index_Specification,              
      A_Procedure_Body_Stub,                     
      A_Function_Body_Stub,                      
      A_Package_Body_Stub,                       
      A_Task_Body_Stub,                          
      A_Protected_Body_Stub,                     
      An_Exception_Declaration,                  
      A_Choice_Parameter_Specification,          
      A_Generic_Procedure_Declaration,           
      A_Generic_Function_Declaration,            
      A_Generic_Package_Declaration,             
      A_Package_Instantiation,                   
      A_Procedure_Instantiation,                 
      A_Function_Instantiation,                  
      A_Formal_Object_Declaration,               
      A_Formal_Type_Declaration,                 
      A_Formal_Procedure_Declaration,            
      A_Formal_Function_Declaration,             
      A_Formal_Package_Declaration,              
      A_Formal_Package_Declaration_With_Box,     
      A_Derived_Type_Definition,             
      A_Derived_Record_Extension_Definition, 
      An_Enumeration_Type_Definition,        
      A_Signed_Integer_Type_Definition,      
      A_Modular_Type_Definition,             
      A_Root_Integer_Definition,             
      A_Root_Real_Definition,                
      A_Universal_Integer_Definition,        
      A_Universal_Real_Definition,           
      A_Universal_Fixed_Definition,          
      A_Floating_Point_Definition,           
      An_Ordinary_Fixed_Point_Definition,    
      A_Decimal_Fixed_Point_Definition,      
      An_Unconstrained_Array_Definition,     
      A_Constrained_Array_Definition,        
      A_Record_Type_Definition,              
      A_Tagged_Record_Type_Definition,       
      An_Ordinary_Interface,           
      A_Limited_Interface,             
      A_Task_Interface,                
      A_Protected_Interface,           
      A_Synchronized_Interface,        
      A_Pool_Specific_Access_To_Variable, 
      An_Access_To_Variable,              
      An_Access_To_Constant,              
      An_Access_To_Procedure,             
      An_Access_To_Protected_Procedure,   
      An_Access_To_Function,              
      An_Access_To_Protected_Function,    
      A_Subtype_Indication,             
      A_Range_Attribute_Reference,           
      A_Simple_Expression_Range,             
      A_Digits_Constraint,                   
      A_Delta_Constraint,                    
      An_Index_Constraint,                   
      A_Discriminant_Constraint,            
      A_Component_Definition,           
      A_Discrete_Subtype_Indication_As_Subtype_Definition,     
      A_Discrete_Range_Attribute_Reference_As_Subtype_Definition, 
      A_Discrete_Simple_Expression_Range_As_Subtype_Definition,   
      A_Discrete_Subtype_Indication,         
      A_Discrete_Range_Attribute_Reference,  
      A_Discrete_Simple_Expression_Range,    
      An_Unknown_Discriminant_Part,     
      A_Known_Discriminant_Part,        
      A_Record_Definition,              
      A_Null_Record_Definition,         
      A_Null_Component,                 
      A_Variant_Part,                   
      A_Variant,                        
      An_Others_Choice,                 
      An_Anonymous_Access_To_Variable,  
      An_Anonymous_Access_To_Constant,  
      An_Anonymous_Access_To_Procedure,           
      An_Anonymous_Access_To_Protected_Procedure, 
      An_Anonymous_Access_To_Function,            
      An_Anonymous_Access_To_Protected_Function, 
      A_Private_Type_Definition,        
      A_Tagged_Private_Type_Definition, 
      A_Private_Extension_Definition,   
      A_Task_Definition,                
      A_Protected_Definition,           
      A_Formal_Private_Type_Definition,         
      A_Formal_Tagged_Private_Type_Definition,  
      A_Formal_Derived_Type_Definition,         
      A_Formal_Discrete_Type_Definition,        
      A_Formal_Signed_Integer_Type_Definition,  
      A_Formal_Modular_Type_Definition,         
      A_Formal_Floating_Point_Definition,       
      A_Formal_Ordinary_Fixed_Point_Definition, 
      A_Formal_Decimal_Fixed_Point_Definition,  
      A_Formal_Ordinary_Interface,             
      A_Formal_Limited_Interface,              
      A_Formal_Task_Interface,                 
      A_Formal_Protected_Interface,            
      A_Formal_Synchronized_Interface,        
      A_Formal_Unconstrained_Array_Definition,  
      A_Formal_Constrained_Array_Definition,    
      A_Formal_Pool_Specific_Access_To_Variable,  
      A_Formal_Access_To_Variable,             
      A_Formal_Access_To_Constant,       
      A_Formal_Access_To_Procedure,              
      A_Formal_Access_To_Protected_Procedure,    
      A_Formal_Access_To_Function,               
      A_Formal_Access_To_Protected_Function,     
      An_Integer_Literal,                        
      A_Real_Literal,                            
      A_String_Literal,                          
      An_Identifier,                             
      An_And_Operator,                     
      An_Or_Operator,                      
      An_Xor_Operator,                     
      An_Equal_Operator,                   
      A_Not_Equal_Operator,                
      A_Less_Than_Operator,                
      A_Less_Than_Or_Equal_Operator,       
      A_Greater_Than_Operator,             
      A_Greater_Than_Or_Equal_Operator,    
      A_Plus_Operator,                     
      A_Minus_Operator,                    
      A_Concatenate_Operator,              
      A_Unary_Plus_Operator,               
      A_Unary_Minus_Operator,              
      A_Multiply_Operator,                 
      A_Divide_Operator,                   
      A_Mod_Operator,                      
      A_Rem_Operator,                      
      An_Exponentiate_Operator,            
      An_Abs_Operator,                     
      A_Not_Operator,                      
      A_Character_Literal,                       
      An_Enumeration_Literal,                    
      An_Explicit_Dereference,                   
      A_Function_Call,                           
      An_Indexed_Component,                      
      A_Slice,                                   
      A_Selected_Component,                      
      An_Access_Attribute,           
      An_Address_Attribute,          
      An_Adjacent_Attribute,         
      An_Aft_Attribute,              
      An_Alignment_Attribute,        
      A_Base_Attribute,              
      A_Bit_Order_Attribute,         
      A_Body_Version_Attribute,      
      A_Callable_Attribute,          
      A_Caller_Attribute,            
      A_Ceiling_Attribute,           
      A_Class_Attribute,             
      A_Component_Size_Attribute,    
      A_Compose_Attribute,           
      A_Constrained_Attribute,       
      A_Copy_Sign_Attribute,         
      A_Count_Attribute,             
      A_Definite_Attribute,          
      A_Delta_Attribute,             
      A_Denorm_Attribute,            
      A_Digits_Attribute,            
      An_Exponent_Attribute,         
      An_External_Tag_Attribute,     
      A_First_Attribute,             
      A_First_Bit_Attribute,         
      A_Floor_Attribute,             
      A_Fore_Attribute,              
      A_Fraction_Attribute,          
      An_Identity_Attribute,         
      An_Image_Attribute,            
      An_Input_Attribute,            
      A_Last_Attribute,              
      A_Last_Bit_Attribute,          
      A_Leading_Part_Attribute,      
      A_Length_Attribute,            
      A_Machine_Attribute,           
      A_Machine_Emax_Attribute,      
      A_Machine_Emin_Attribute,      
      A_Machine_Mantissa_Attribute,  
      A_Machine_Overflows_Attribute, 
      A_Machine_Radix_Attribute,     
      A_Machine_Rounds_Attribute,    
      A_Max_Attribute,               
      A_Max_Size_In_Storage_Elements_Attribute, 
      A_Min_Attribute,               
      A_Model_Attribute,             
      A_Model_Emin_Attribute,        
      A_Model_Epsilon_Attribute,     
      A_Model_Mantissa_Attribute,    
      A_Model_Small_Attribute,       
      A_Modulus_Attribute,           
      An_Output_Attribute,          
      A_Partition_ID_Attribute,      
      A_Pos_Attribute,               
      A_Position_Attribute,          
      A_Pred_Attribute,              
      A_Range_Attribute,             
      A_Read_Attribute,              
      A_Remainder_Attribute,         
      A_Round_Attribute,             
      A_Rounding_Attribute,          
      A_Safe_First_Attribute,        
      A_Safe_Last_Attribute,         
      A_Scale_Attribute,             
      A_Scaling_Attribute,           
      A_Signed_Zeros_Attribute,      
      A_Size_Attribute,              
      A_Small_Attribute,             
      A_Storage_Pool_Attribute,      
      A_Storage_Size_Attribute,      
      A_Succ_Attribute,              
      A_Tag_Attribute,               
      A_Terminated_Attribute,        
      A_Truncation_Attribute,        
      An_Unbiased_Rounding_Attribute, 
      An_Unchecked_Access_Attribute, 
      A_Val_Attribute,               
      A_Valid_Attribute,             
      A_Value_Attribute,             
      A_Version_Attribute,           
      A_Wide_Image_Attribute,        
      A_Wide_Value_Attribute,        
      A_Wide_Width_Attribute,        
      A_Width_Attribute,             
      A_Write_Attribute,             
      A_Machine_Rounding_Attribute,
      A_Mod_Attribute,
      A_Priority_Attribute,
      A_Stream_Size_Attribute,
      A_Wide_Wide_Image_Attribute,
      A_Wide_Wide_Value_Attribute,
      A_Wide_Wide_Width_Attribute,
      An_Implementation_Defined_Attribute,  
      An_Unknown_Attribute,
      A_Record_Aggregate,                        
      An_Extension_Aggregate,                    
      A_Positional_Array_Aggregate,              
      A_Named_Array_Aggregate,                   
      An_And_Then_Short_Circuit,                 
      An_Or_Else_Short_Circuit,                  
      An_In_Range_Membership_Test,               
      A_Not_In_Range_Membership_Test,            
      An_In_Type_Membership_Test,                
      A_Not_In_Type_Membership_Test,             
      A_Null_Literal,                            
      A_Parenthesized_Expression,                
      A_Type_Conversion,                         
      A_Qualified_Expression,                    
      An_Allocation_From_Subtype,                
      An_Allocation_From_Qualified_Expression,   
      A_Pragma_Argument_Association,         
      A_Discriminant_Association,            
      A_Record_Component_Association,        
      An_Array_Component_Association,        
      A_Parameter_Association,               
      A_Generic_Association,                 
      A_Null_Statement,                    
      An_Assignment_Statement,             
      An_If_Statement,                     
      A_Case_Statement,                    
      A_Loop_Statement,                    
      A_While_Loop_Statement,              
      A_For_Loop_Statement,                
      A_Block_Statement,                   
      An_Exit_Statement,                   
      A_Goto_Statement,                    
      A_Procedure_Call_Statement,          
      A_Return_Statement,                  
      An_Extended_Return_Statement,        
      An_Accept_Statement,                 
      An_Entry_Call_Statement,             
      A_Requeue_Statement,                 
      A_Requeue_Statement_With_Abort,      
      A_Delay_Until_Statement,             
      A_Delay_Relative_Statement,          
      A_Terminate_Alternative_Statement,   
      A_Selective_Accept_Statement,        
      A_Timed_Entry_Call_Statement,        
      A_Conditional_Entry_Call_Statement,  
      An_Asynchronous_Select_Statement,    
      An_Abort_Statement,                  
      A_Raise_Statement,                   
      A_Code_Statement,                    
      An_If_Path,                     
      An_Elsif_Path,                  
      An_Else_Path,                   
      A_Case_Path,                    
      A_Select_Path,                  
      An_Or_Path,                     
      A_Then_Abort_Path,              
      A_Use_Package_Clause,           
      A_Use_Type_Clause,              
      A_With_Clause,                  
      An_Attribute_Definition_Clause,           
      An_Enumeration_Representation_Clause,     
      A_Record_Representation_Clause,           
      An_At_Clause,                             
      A_Component_Clause,             
      An_Exception_Handler,    
      Non_Trivial_Mapping,
      Not_Implemented_Mapping,
      Trivial_Mapping,        
      No_Mapping);

   subtype Internal_Expression_Kinds is Internal_Element_Kinds
      range An_Integer_Literal .. An_Allocation_From_Qualified_Expression;

   subtype Internal_Operator_Symbol_Kinds is Internal_Expression_Kinds
      range An_And_Operator .. A_Not_Operator;

   function Int_Kind (E : Element) return Internal_Element_Kinds;

end Case_Optimization_Pkg1;
